{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5d8d4d21",
   "metadata": {},
   "source": [
    "# best square approximating orthogonal polynomial"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb386672",
   "metadata": {},
   "source": [
    "## overview of best square approximation foundamentals\n",
    "1. by default, we don't quite know the actul function formula of curve to be fitted, then we could only have observations like $(x_i, y_i), \\space i=0,1,\\cdots, n$\n",
    "2. then we empirically would use family of polynomial functions $H_n \\in \\Phi_n = span\\{1, x, x^2,\\cdots,x^n\\}$ trying to fit this invisible function.\n",
    "3. this fitting function could be like: \n",
    "$$\n",
    "s^*(x) = \\displaystyle\\sum_{i=0}^{n}{a_i \\varphi_i} \\space, \\varphi_i = 1, x, x^2,\\cdots,x^n\n",
    "$$\n",
    "4. mostly, number of observed points we have $(m)$ is always not equal to degree of polynomials $(n)$, we could thus end up with equation set like:\n",
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "a_{11}x_1  + a_{12}x_2 + \\cdots + a_{1n}x_n = b_1 \\\\\n",
    "a_{21}x_1  + a_{22}x_2 + \\cdots + a_{2n}x_n = b_2 \\\\\n",
    "\\vdots \\\\\n",
    "a_{m1}x_1  + a_{m2}x_2 + \\cdots + a_{mn}x_n = b_m \\\\\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$\n",
    "5. the queation set above could be morbid, which means that we might not get accurate solution or even couldn't get one solution. To fix this problem, we do following transformation:\n",
    "$$\n",
    "    \\mathbf{A}^T\\mathbf{A}\\mathbf{x} = \\mathbf{A}^T \\mathbf{b}\n",
    "$$\n",
    "6. This transfomation will give us normal equation formula:\n",
    "$$\n",
    "\\begin{pmatrix}\n",
    "(\\varphi_0,\\varphi_0) & (\\varphi_0,\\varphi_1) & \\cdots & (\\varphi_0,\\varphi_n) \\\\\n",
    "(\\varphi_1,\\varphi_0) & (\\varphi_1,\\varphi_1) & \\cdots & (\\varphi_1,\\varphi_n) \\\\\n",
    "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n",
    "(\\varphi_n,\\varphi_0) & (\\varphi_n,\\varphi_1) & \\cdots & (\\varphi_n,\\varphi_n) \\\\\n",
    "\\end{pmatrix}\n",
    "\\begin{pmatrix}\n",
    "a_0 \\\\\n",
    "a_1 \\\\\n",
    "\\vdots \\\\\n",
    "a_n \\\\\n",
    "\\end{pmatrix}\n",
    "=\n",
    "\\begin{pmatrix}\n",
    "(\\varphi_0, \\mathbf{y}) \\\\\n",
    "(\\varphi_1, \\mathbf{y}) \\\\\n",
    "\\vdots \\\\\n",
    "(\\varphi_n, \\mathbf{y}) \\\\\n",
    "\\end{pmatrix}\n",
    "$$\n",
    "where \n",
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "y = (y_1, y_2, \\cdots, y_m)^T \\\\\n",
    "(\\varphi_j, \\varphi_k) = \\displaystyle\\sum_{i=0}^{m}{\\omega_i\\varphi_j(x_i)\\varphi_k(x_i)} \\\\\n",
    "(\\varphi_k,\\mathbf{y}) = \\displaystyle\\sum_{i=0}^{m}{\\omega_i y_i\\varphi_k(x_i)}\\\\\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$\n",
    "7. due to the fact that we already knoe each point $(x_i, y_i)$ and hoping to find each paramter $a_i$, in the above equation set we will set each $a_i$ as unkonwns and brings value into specific position in equation set<br>\n",
    "the above matrix equation could be simplified in matrix form like:\n",
    "$$\n",
    "    \\mathbf{G}\\mathbf{a} = \\mathbf{d}\n",
    "$$\n",
    "8. thus, mse could be calculated as follows:\n",
    "$$\n",
    "    ||\\delta||^{2}_{2} =  \\displaystyle\\sum_{i=1}^{m}{{[s^*(x_i)-y_i]}^2} = ||\\mathbf{y}||_2^2 - \\displaystyle\\sum_{i=1}^{n}{a_n d_n}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fcae9440",
   "metadata": {},
   "source": [
    "## for orthogonal polynomials\n",
    "\n",
    "$$\n",
    "    (\\varphi_j,\\varphi_k) = \\displaystyle\\int_{a}^{b}{\\rho(x)}\\varphi_j(x)\\varphi_k(x)dx = \n",
    "    \\left\\{\n",
    "    \\begin{array}{ll}\n",
    "    0, & j \\ne k \\\\\n",
    "    A_k >0, & j = k\n",
    "    \\end{array}\n",
    "    \\right .\n",
    "$$\n",
    "\n",
    "thus, normal matrix will be just as diagonal matrix with vales only in diagoal places<br>\n",
    "we could then get best square approximation:\n",
    "\n",
    "$$\n",
    "    s^*_n(x) = \\displaystyle\\sum_{k=0}^{n}{c_k\\varphi_k}{x}\n",
    "$$\n",
    "\n",
    "where\n",
    "\n",
    "$$\n",
    "    c_k = \\displaystyle\\sum_{k=0}^{n}{\\frac{(f,\\varphi_k)}{(\\varphi_k,\\varphi_k)}\\varphi_k(x)}\n",
    "$$\n",
    "\n",
    "and with error:\n",
    "\n",
    "$$\n",
    "\\begin{array}{ll}\n",
    "    ||\\delta(x)||_2 = {\\big[||f(x)||^2_2-\\displaystyle\\sum_{k=0}^{n-1}{m}\\big]}^{\\frac{1}{2}} \\\\\n",
    "    m={\\big[\\displaystyle\\frac{(f(x),\\varphi_k(x))}{||\\varphi_k(x)||_2}\\big]}^2\n",
    "\\end{array}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4fca7786",
   "metadata": {},
   "source": [
    "## chebyshev polynomial\n",
    "### base function\n",
    "$$\n",
    "       T_n(x) = cos[narccos(x)], \\space |x| \\le 1\n",
    "$$\n",
    "\n",
    "### recursive formula\n",
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "T_0(x) = 0 \\\\\n",
    "T_1(x) = 1 \\\\\n",
    "T_{n+1}(x) = 2xT_{n}(x) - T_{n-1}(x) \\\\\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$\n",
    "### important properties\n",
    "1. coefficient of highest term $T_n(x)$ is always $2^{n-1}$\n",
    "2. orthogonality\n",
    "$$\n",
    "\\int_{-1}^{1}{\\frac{T_{n}(x)T_{m}(x)}{\\sqrt{1-x^2}}dx} = \n",
    "\\left \\{\n",
    "\\begin{array}{ll}\n",
    "0 &, m \\ne n, \\\\\n",
    "\\frac{\\pi}{2} &, m = n \\ne 0, \\\\\n",
    "\\pi &, m = n = 0. \\\\\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$\n",
    "3. parity\n",
    "$$\n",
    "    T_n(-x) = {(-1)}^nT_n(x)\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "34a3a44a",
   "metadata": {},
   "source": [
    "## legrend polynomial\n",
    "### base function\n",
    "\n",
    "$$\n",
    "    p_n(x) = \\frac{1}{2^n n!}\\frac{d^n}{dx^n}[{(x^2-1)}^n]\n",
    "$$\n",
    "\n",
    "### recursive formula\n",
    "\n",
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "p_0(x) = 1 \\\\\n",
    "p_1(x) = x \\\\\n",
    "(n+1)p_{n+1}(x) = (2n+1)xp_n(x) -np_{n-1}(x)\n",
    "\\end{array}\n",
    "\\right .\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1a6c8603",
   "metadata": {},
   "source": [
    "# python implementation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "372e195c",
   "metadata": {},
   "source": [
    "## numpy chebyshev\n",
    "\n",
    "<font color=maroon, size=5.5><b>numpy.polynomial.chebyshev</b></font><br>\n",
    "\n",
    "\n",
    "1. chebyshev.Chebyshev(coef=,domain=(),window=()).linspace(n) - will return a tuple with x at the first place and its corresponding value at the second place\n",
    "2. chebyshev.Chebyshev(coef=,domain=(),window=()) - will return its chebyshev polynomial form <br>\n",
    "<font color=burgendy size=3.5><b>note that Polynomial's coefficients are in ascending order, window is by default [-1,1] which means that all values will be scaled to [-1,1]</b></font> <br>\n",
    "3. chebyshev.chebfit(x,y,deg,full=True) - will fit and find parameter of each {T_n(x)} with regards to MSE\n",
    "4. chebyshev.chebval(x,coef) - will return chebyshev fit result\n",
    "5. chebyshev.chebroots((roots)) - will return coefficient values based on roots provided"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "548bbb0e",
   "metadata": {},
   "source": [
    "### variable transformation\n",
    "due to the fact that chebyshev polynomial only works on intervals $[-1,1]$, a transformation of definition domain should be applied:\n",
    "$$\n",
    "    x = \\frac{b-a}{2}t + \\frac{b+a}{2} \\space,\\space -1 \\le t \\le 1\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7813d2b8",
   "metadata": {},
   "source": [
    "### sample\n",
    "approximate functions like\n",
    "\n",
    "$$\n",
    "    f(x) = -x^3 + 4x^2 + 13x + 4sin(2x), \\space x \\in (2,3)\n",
    "$$\n",
    "white noise added to this function is:\n",
    "$$\n",
    "    \\mathbf{WN}(0,1)\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 367,
   "id": "55ad75e9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-5155.23887167  6336.60859399 -1779.99126904   235.82479769\n",
      "   -11.95231615]\n",
      "[array([9.52288102]), 5, array([2.20514489e+00, 3.69708003e-01, 2.55180496e-02, 9.10279374e-04,\n",
      "       1.67805581e-05]), 4.440892098500626e-15]\n"
     ]
    }
   ],
   "source": [
    "from numpy.polynomial import chebyshev as c\n",
    "import warnings\n",
    "import numpy as np\n",
    "\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "# set hyperparameters\n",
    "a,b = 2,3\n",
    "deg = 4\n",
    "pts = 20\n",
    "\n",
    "x = np.linspace(a,b,pts)\n",
    "y = -np.power(x,3)+4*np.power(x,2)+13*x+4*np.sin(2*x)+np.random.randn(len(x))\n",
    "p,stats = c.chebfit(x,y,deg,full=True)\n",
    "print(p)\n",
    "print(stats)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7034e01e",
   "metadata": {},
   "source": [
    "### returns of chebyshev.chebfit stats\n",
    "```\n",
    "> residuals – sum of squared residuals of the least squares fit\n",
    "> rank – the numerical rank of the scaled Vandermonde matrix\n",
    "> singular_values – singular values of the scaled Vandermonde matrix\n",
    "> rcond – value of rcond.\n",
    "---------------------\n",
    "rcond:float, optional\n",
    "Relative condition number of the fit. Singular values smaller than this relative to the largest singular value will be ignored. The default value is len(x)*eps, where eps is the relative precision of the float type, about 2e-16 in most cases.\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 374,
   "id": "d1f3bc83",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-5155.238871667212 + 6336.608593993917·T₁(x) - 1779.991269040021·T₂(x) +\n",
      "235.8247976865312·T₃(x) - 11.952316150479856·T₄(x)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fcf920aae20>"
      ]
     },
     "execution_count": 374,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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mcTERCUxMVHvPmPISfz4+HilSpUqSvfu3ZUrV64ohw8fVkqWLKnMnDlTURRFWbx4sWJnZ6fUrVtXOXTokHLy5EmlRIkSyoQJExRFUZS//vpLsbCwUMaPH69cu3ZNCQgIUIoWLapcvXpVURRF8fT0VMzNzZWVK1cqV65cUbp06aJUr15dSUpKUhRFUbp166Z0795dV58xY8YoTZs21f3cs2dPpWHDhsq///6rnDt3TqlXr54yevRoRVEUJTw8XAGUypUrK0uXLlWuXLmiNG/eXPH09NRdW+XKlZUOHToo4eHhyoYNGxQzMzNl69atiqIoyoULFxRzc3Plzp07iqIoyqNHjxRbW1vl6NGj2XrtPD09FQsLC2XNmjXKlStXlG7duimVK1dWHj58qCiKovTp00epVauWcuzYMeXvv/9WmjRporRr107vecaPH59u2927dxUrKytl586diqIoilarVSpWrKjMnTs3y/+XcePGKYmJicrevXsVc3NzJTAwUImMjFTGjh2rFClSRLly5YqyePFiBVCWLVumBAQEpPu+WrVq6erRt29fpW/fvhnqXK1aNeXdd99VoqKilFOnTimvvfaasnr16gy/d4Cyf//+LF/H7PxNjR6tKJ07Z3ka5fr168r169fTbdsyerRiBcq0kijWY1CYkL0vi0kWSnRsdNYBsxHfmAoyfl5j165dW6lVq1au37OlxVPIbNu2jevXrxMUFETlypVp3rw569evp2nTproysbGxzJ8/n5YtW9KoUSPatGmju6E/b948qlSpwoQJE3BycmLSpEkoisLWrVt1x3fq1IkePXpQuXJlZsyYwaVLlzh+/DiQuvro5s2biY1N7U9fvXo1/v5PpxqxsbFBURSSk5OpVasWZ86cyfCpfODAgfTu3ZvKlSvTs2dPXd22bt1KZGQkCxYswNnZmS5duuDt7c3KlSsBqFmzJg0bNmTLli0A7Nq1Cycnp3TX/iLvvPMO7733nu7awsPDOXHiBDExMSxdupRZs2bRpEkT6taty4IFC9i+fbvedZ6e5+DgQKdOnVi2bBkAhw4d4vbt2/To0SPL/5fIyEgAZsyYQbdu3RgwYAAVK1bkf//7H9WqVdPdsylVqhS9evWiWrVq6b5PW1MnK4qicPDgQZYvX87jx4+5ePEiZmZmXLhwIduvW05NmQIbN+bwoJAQGk+fzrv2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",
      "text/plain": [
       "<Figure size 450x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib as mpl\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "from matplotlib import ticker\n",
    "from numpy.polynomial.chebyshev import chebval, Chebyshev\n",
    "from numpy.polynomial import Polynomial\n",
    "\n",
    "# x and y are prepared\n",
    "y_C = Chebyshev(coef=p,domain=(a,b),window=(a,b)).linspace(pts)\n",
    "cheb_y = chebval(y_C[0],p)\n",
    "print(Chebyshev(coef=p,domain=(a,b),window=(a,b)))\n",
    "\n",
    "fig, ax = plt.subplots(1,1,figsize=(3,2),dpi=150,\n",
    "                       facecolor=\"whitesmoke\",\n",
    "                       edgecolor=\"gray\")\n",
    "fig.subplots_adjust(top=0.92,bottom=0.03,hspace=0.15)\n",
    "ax.scatter(x,y,marker='o',c='g')\n",
    "ax.plot(x,y,lw=.75,ls='--',c='b',label=\"original\")\n",
    "ax.plot(x,cheb_y,lw=.75,ls='-',c='r',label=\"chebyshev\")\n",
    "ax.plot(y_C[0],y_C[1],lw=.75,ls='-.',c='k',label=\"chebyshev polynomial\")\n",
    "ax.xaxis.set_major_locator(ticker.MultipleLocator((b-a)*2/pts))\n",
    "plt.xticks(fontsize=5)\n",
    "ax.grid(alpha=0.4)\n",
    "ax.legend(loc='best',fontsize=7.5)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c219b7aa",
   "metadata": {},
   "source": [
    "### matrix derivation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "503176e6",
   "metadata": {},
   "source": [
    "a n-order polynomial could be expanded in chebyshev polynomial form like: \n",
    "\n",
    "$$\n",
    "p(x) = \\sum_{n = 0}^{N} a_nT_n\n",
    "$$ \n",
    "\n",
    "take 4 points(1,1),(2,3),(3,5),(4,4) as input and calculate chebyshev polynomial expansion form. the highest order of chebyshev polynomial is 3 due to the fact that we only have 4 input data points, thus we have: \n",
    "\n",
    "$$\n",
    "p(x) = \\sum_{n = 0}^{3} a_nT_n = a_0 T_0(x)+a_1 T_1(x)+a_2 T_2(x)+a_3 T_3(x)\n",
    "$$ \n",
    "\n",
    "take 4 points' values $x_i$ and $y_i$ separately into above equation set： \n",
    "\n",
    "$$\n",
    "\\begin{array}{}\n",
    "p(1)=a_0 T_0(1)ll+a_1 T_1(1)+a_2 T_2(1)+a_3 T_3(1) =1 \\\\\n",
    "p(2)=a_0 T_0(2)+a_1 T_1(2)+a_2 T_2(2)+a_3 T_3(2) =3 \\\\\n",
    "p(3)=a_0 T_0(3)+a_1 T_1(3)+a_2 T_2(3)+a_3 T_3(3) =5 \\\\\n",
    "p(4)=a_0 T_0(4)+a_1 T_1(4)+a_2 T_2(4)+a_3 T_3(4) =4\n",
    "\\end{array}\n",
    "$$ \n",
    "\n",
    "thus we have(recursive formula):\n",
    "\n",
    "$$\n",
    "\\begin{array}{ll}\n",
    "T_0(1) = T_0(2) = T_0(3) = T_0(4) = 1 \\\\\n",
    "T_1(1) = 1 , T_1(2) = 2, T_1(3) = 3, T_1(4) = 4 \\\\\n",
    "T_2(1) = 1 , T_2(2) = 7, T_2(3) = 17, T_2(4) =31 \\\\\n",
    "T_3(1) = 1 , T_3(2) = 26, T_3(3) = 99, T_3(4) =244\n",
    "\\end{array}\n",
    "$$ \n",
    "\n",
    "equation above could be transformed into: \n",
    "\n",
    "$$\n",
    "p(1)=a_0 +1\\times a_1 +1\\times a_2 +1\\times a_3 =1 \\\\\n",
    "p(2)=a_0 +2\\times a_1+7\\times a_2 +26\\times a_3 =3 \\\\\n",
    "p(3)=a_0 +3\\times a_1+17 \\times a_2+99\\times a_3 =5 \\\\\n",
    "p(4)=a_0 +4\\times a_1+31\\times a_2+244\\times a_3 =4\n",
    "$$ \n",
    "\n",
    "this could be rewrite in matrix form as:\n",
    "\n",
    "$$\n",
    "Ax = y\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4a07a577",
   "metadata": {},
   "source": [
    "## numpy legrend"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7cf5715",
   "metadata": {},
   "source": [
    "### sample\n",
    "<font color=maroon, size=5.5><b>numpy.polynomial.legendre</b></font>\n",
    "\n",
    "1. operation is the same as chebyshev\n",
    "2. in this case, orthogonal ploynomials are legrends"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2cbb02d0",
   "metadata": {},
   "source": [
    "approximate functions like\n",
    "\n",
    "$$\n",
    "    f(x) = -x^3 + 4x^2 + 13\\sqrt{2x} + 3sin(4x), \\space x \\in (2,3)\n",
    "$$\n",
    "white noise added to this function is:\n",
    "$$\n",
    "    \\mathbf{WN}(5,20)\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 377,
   "id": "c0254b54",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-3.71657393e+03  2.45376850e+03 -3.96677948e+02  2.51687316e+01\n",
      " -5.73909064e-01]\n",
      "[array([3696.01897825]), 5, array([2.20237290e+00, 3.85600963e-01, 2.93932489e-02, 1.24361343e-03,\n",
      "       2.88363646e-05]), 4.440892098500626e-15]\n"
     ]
    }
   ],
   "source": [
    "from numpy.polynomial import legendre as l\n",
    "from numpy.polynomial.legendre import Legendre\n",
    "import warnings\n",
    "import numpy as np\n",
    "\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "# set hyperparameters\n",
    "a,b = 5,8\n",
    "deg = 4\n",
    "pts = 20\n",
    "\n",
    "x = np.linspace(a,b,pts)\n",
    "y = -np.power(x,3)+4*np.power(x,2)+13*np.sqrt(2*x)+ 3*np.sin(4*x)+5+np.random.randn(len(x))*20\n",
    "p,stats = l.legfit(x,y,deg,full=True)\n",
    "print(p)\n",
    "print(stats)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ac95f483",
   "metadata": {},
   "source": [
    "### returns of legrend.legbfit stats\n",
    "```\n",
    "> residuals – sum of squared residuals of the least squares fit\n",
    "> rank – the numerical rank of the scaled Vandermonde matrix\n",
    "> singular_values – singular values of the scaled Vandermonde matrix\n",
    "> rcond – value of rcond.\n",
    "---------------------\n",
    "rcond:float, optional\n",
    "Relative condition number of the fit. Singular values smaller than this relative to the largest singular value will be ignored. The default value is len(x)*eps, where eps is the relative precision of the float type, about 2e-16 in most cases.\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 379,
   "id": "da70fae3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-3716.5739325605027 + 2453.7685045782528·P₁(x) - 396.6779482173977·P₂(x) +\n",
      "25.168731615488024·P₃(x) - 0.5739090637507754·P₄(x)\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 450x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from numpy.polynomial.legendre import Legendre, legfit, legval\n",
    "from matplotlib import pyplot as plt\n",
    "from matplotlib import ticker\n",
    "\n",
    "# x and y are prepared\n",
    "y_L = Legendre(coef=p, domain=(a,b),window=(a,b)).linspace(pts)\n",
    "legd_y = legval(y_L[0],p)\n",
    "print(Legendre(coef=p, domain=(a,b),window=(a,b)))\n",
    "\n",
    "fig, ax = plt.subplots(1,1,figsize=(3,2),dpi=150,\n",
    "                       facecolor=\"whitesmoke\",\n",
    "                       edgecolor=\"gray\")\n",
    "fig.subplots_adjust(top=0.92,bottom=0.03,hspace=0.15)\n",
    "ax.scatter(x,y,marker='o',c='g')\n",
    "ax.plot(x,y,lw=.75,ls='--',c='b',label=\"original\")\n",
    "ax.plot(x,legd_y,lw=.75,ls='-',c='r',label=\"legrend\")\n",
    "ax.plot(y_L[0],y_L[1],lw=.75,ls='-.',c='k',label=\"legrend polynomial\")\n",
    "ax.xaxis.set_major_locator(ticker.MultipleLocator((b-a)*2/pts))\n",
    "plt.xticks(fontsize=5)\n",
    "ax.grid(alpha=0.4)\n",
    "ax.legend(loc='best',fontsize=7.5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e5d4e4c7",
   "metadata": {},
   "source": [
    "# polynomial fitting\n",
    "1. to note that in this section there's no restriction on orthogonality.\n",
    "## numpy polyfit\n",
    "\n",
    "<font color=maroon size=5.5><b>numpy.Polynomial</b></font>\n",
    "\n",
    "1. numpy.polyfit(x,y,deg,full=True) \n",
    "2. numpy.polyval(x,coef)\n",
    "3. numpy.Polynomial(coef,domain,window) <br>\n",
    "<font color=burgendy size=3.5><b>note that Polynomial's coefficients are in ascending order, window is by default [-1,1] which means that all values will be scaled to [-1,1]</b></font> <br>\n",
    "4. numpy.poly1d(c_or_r,r=False,variable=None) - display polynomials, where coefficients are in descending orders"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce942b9a",
   "metadata": {},
   "source": [
    "### sample\n",
    "note that like interpolation, we don't need any guess of original data distribution or function, we just need to determin order of polynomial $\\phi_n(x)$ and feed data points to <font color=maroon><b>numpy.polyfit</b></font> and this algorithm would use mse to calculate the most fitting polynomial form.<br>\n",
    "here we have 100 data points"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 322,
   "id": "aa0df55c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             77              76              75              74\n",
      "-1.484e-143 x  + 1.867e-141 x  + 1.353e-139 x  - 8.031e-139 x \n",
      "               73              72             71              70\n",
      " - 1.098e-135 x  - 1.336e-133 x  - 9.31e-132 x  - 2.144e-130 x \n",
      "              69              68              67              66\n",
      " + 4.84e-128 x  + 9.358e-126 x  + 1.043e-123 x  + 8.301e-122 x \n",
      "               65              64              63              62\n",
      " + 4.019e-120 x  - 9.469e-119 x  - 5.229e-116 x  - 7.805e-114 x \n",
      "               61              60              59              58\n",
      " - 8.205e-112 x  - 6.557e-110 x  - 3.452e-108 x  + 2.313e-107 x \n",
      "               57              56              55             54\n",
      " + 3.564e-104 x  + 5.772e-102 x  + 6.418e-100 x  + 5.461e-98 x \n",
      "             53             52             51             50\n",
      " + 3.27e-96 x  + 4.655e-95 x  - 2.198e-92 x  - 4.049e-90 x \n",
      "              49             48             47             46\n",
      " - 4.665e-88 x  - 3.965e-86 x  - 2.243e-84 x  - 5.632e-84 x \n",
      "              45             44             43             42\n",
      " + 1.891e-80 x  + 3.015e-78 x  + 2.996e-76 x  + 1.886e-74 x \n",
      "              41             40             39             38\n",
      " + 1.485e-73 x  - 1.524e-70 x  - 2.432e-68 x  - 2.131e-66 x \n",
      "             37             36             35             34\n",
      " - 6.87e-65 x  + 1.314e-62 x  + 2.921e-60 x  + 3.203e-58 x \n",
      "              33             32             31             30\n",
      " + 1.716e-56 x  - 1.129e-54 x  - 4.068e-52 x  - 5.407e-50 x \n",
      "             29            28             27             26\n",
      " - 3.89e-48 x  + 3.65e-47 x  + 5.437e-44 x  + 8.208e-42 x \n",
      "             25             24             23             22\n",
      " + 6.08e-40 x  - 8.499e-39 x  - 8.709e-36 x  - 1.134e-33 x \n",
      "              21             20             19             18\n",
      " - 4.879e-32 x  + 7.423e-30 x  + 1.495e-27 x  + 7.933e-26 x \n",
      "              17             16             15             14\n",
      " - 9.858e-24 x  - 1.842e-21 x  - 2.129e-20 x  + 2.076e-17 x \n",
      "              13            12             11             10\n",
      " + 1.026e-15 x  - 2.35e-13 x  - 7.289e-12 x  + 3.219e-09 x \n",
      "              9             8             7            6          5\n",
      " - 2.794e-07 x + 1.325e-05 x - 0.0003975 x + 0.007876 x - 0.1038 x\n",
      "           4         3        2\n",
      " + 0.8994 x - 5.002 x + 17.1 x - 32.21 x + 30.04\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import warnings\n",
    "from matplotlib import pyplot as plt\n",
    "from matplotlib import ticker\n",
    "\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "x = np.arange(1, 101)\n",
    "y = np.array([11, 5, 4, 7, 6, 6, 5, 7,  \n",
    "              13, 6, 5, 7, 12, 5, 4, 6,\n",
    "              9, 5, 5, 11, 29, 21, 17, 20,\n",
    "              27, 13, 9, 10, 16, 6, 5, 7,\n",
    "              11, 5, 5, 6, 12, 7, 7, 10,\n",
    "              15, 10, 9, 11, 15, 10, 10, 16,\n",
    "              26, 21, 23, 36, 50, 45, 45, 49,\n",
    "              57, 43, 40, 44, 52, 43, 42, 45,\n",
    "              52, 41, 39, 41, 48, 35, 34, 35,\n",
    "              42, 34, 36, 43, 55, 48, 54, 65,\n",
    "              80, 70, 74, 85, 101, 89, 88, 90,\n",
    "              100, 87, 88, 89, 104, 89, 89, 90,\n",
    "              106, 96, 94, 99])\n",
    "res1 = np.polyfit(x,y,deg=100,full=True)\n",
    "res_p = np.poly1d(res1[0],r=False)\n",
    "print(res_p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 323,
   "id": "31aee179",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhwAAAHzCAYAAABrBMS2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAABcSAAAXEgFnn9JSAACV30lEQVR4nOzdd1iV5RvA8e9hypAtKCDiwJF7b3PlLmc569cwrRzZsExtWI5MK00zzTRNzJEjR2nuvQ23oqKCE1RQ2eOc8/vjdI4goIz3LLw/1+UFvPM+L8i5eZ77eR5VYmKiFiGEEEIII7IxdwBCCCGEKPok4RBCCCGE0UnCIYQQQgijk4RDCCGEEEYnCYcQQgghjE4SDiGEEEIYnSQcQgghhDA6STiEEEIIYXSScAghhBDC6CThEEIIIYTRScIhhBBCCKOThEMIIYQQRicJhxBCCCGMThIOIYQQQhidJBxCWLFBgwbh4uLCokWLzB2Kybm4uODi4mLUe1SpUgUXFxciIyONdo9bt24xZMgQnnnmGdzd3QkKCqJnz57cvHkzx+MXLVqEi4sLgwYNMlpMBdGhQwdcXFzYtWuXuUMRFsrO3AEIIcTTKi4ujhYtWnD9+nU8PT0JCQnh9u3bbNy4kZiYGEqVKlXoe0yYMAGAMWPG5On4Xbt2sXv3bpo3b06LFi0KfX8h9KSFQwhhlSpWrEjFihXNHUahhIaGcv36dVq3bs2lS5c4cuQIkZGR7NixI9dkw93dnYoVK1KyZMk83WPixIlMnDgxzzHt3r2biRMnsnv37jyfAxAYGEjFihVxdnbO13ni6SEtHEIIqxQWFmbuEAotPDwcgG7duuHg4GDYXr9+/VzPeeGFF3jhhReMHlt+/fLLL+YOQVg4aeEQQggzSUtLA8iSbAhRVEnCIYQQQgijk4RDPFbmURCJiYmMHTuWZ555Bh8fH+rWrcuPP/6IVqvNcs7jRg88WmGf+esVK1ZQo0YN/Pz8GDNmDCkpKQwbNgw/Pz8qVarEihUrAIiMjMTFxYUqVaoQFRVFv3798Pf3p0SJErRp04b169dnu2/Hjh1xcXHJtdm3d+/euLi4MHPmTEWe1dy5c6ldu7ahEPCDDz7gzp07OZ6n0WiYN28ezZs3x8fHB39/f55//nk2b95c4Fj09uzZg4uLCxUqVECj0WTbf/z4cVxcXChTpgzp6elA9u/R/PnzadCgASVKlKBKlSq89957xMfH53i/VatW0a5dO/z8/PD19aVt27YsX748yzG7du3CxcWFDh06sH37dho2bEiJEiUYOHAgqampfPHFFwQEBFC2bFl+/PHHXF9bXkep3Lp1i1GjRlGnTh18fHwoVaoU7du3Z926dU881xj0I19cXFxYvHgxAG+99ZZh25NGHT1plIr++T76fDJve/S56UeYuLi4GOo9Jk6cmOV4ffFpbvIySiXzqJ/Lly/z6quvUrZsWUqWLEnLli3ZunVrjufdvHmT119/ndKlS+Pt7U3Hjh05deoU8+bNo3bt2kYfrSSUITUcIk+Sk5Pp1KkTR44coUyZMhQrVoxz587x0UcfATBkyJBCXX/fvn0sXbqUgIAAEhISmDZtGnv27OHUqVN4eHhw7do1hg4dSvfu3Q3nJCUl0b59e6KioggKCuLOnTscOHCA3r17M27cOD788EPDsf369WPXrl0sX76cgQMHZrn3gwcP2Lx5M3Z2drz00kuFeh0Ac+bMISwsDBcXF/z8/Lh69SqzZ89mw4YNbNu2LUuxX1paGn379mXjxo0AlCpViuTkZLZt28a2bdv4+OOP+eyzzwocS9OmTSlTpgyRkZHs2rWLli1bZtm/atUqAF588UXs7e2znf/+++8zZ84cfHx88PT0JCoqip9//pmbN2+ydOnSLMcOHTqUX3/9FQAfHx9UKhX79+9n//79bN68mZ9//hmVSmU4PiIigl69euHr60tycjJLlizhwoULHDt2jJIlS3Lt2jU++eQTevToUeDRGleuXKFVq1bExMTg7OxMUFAQ8fHx7Nmzhz179vDrr78q8j3Pj8qVK+Pu7g7AtWvXiIuLIzAwEE9PT8MxXl5eBb6+q6sr1atXN3x98uRJgCzbHlWuXDnu3bsHQHR0NDExMfj6+uLn52c4JvPnhXXu3DkGDRpEXFwcZcuW5cGDBxw+fJju3buzc+dOateubTj27t27tG7dmqioKDw8PPDz82PXrl00atQIX19fgoODKVGihGKxCeORFg6RJxMnTiQyMpINGzZw5swZLl++TO/evQGYO3duoa9/+fJlli1bxtmzZ2nUqBGge7M4evQoJ0+exN7envj4eG7dumU4586dO6jVavbt28fZs2eJjo5m7NixAIwbN85QkAe6ojxnZ2f27dvHtWvXstx7/fr1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",
      "text/plain": [
       "<Figure size 600x450 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.rcParams[\"axes.unicode_minus\"] = False\n",
    "x_pf = np.linspace(-1,100,120,endpoint=True)\n",
    "y_pf = np.polyval(res1[0], x_pf)\n",
    "\n",
    "fig, ax = plt.subplots(1,1,figsize=(4,3),dpi=150,\n",
    "                       facecolor=\"whitesmoke\",\n",
    "                       edgecolor=\"gray\")\n",
    "fig.suptitle(\"numpy polynomial fitting\")\n",
    "fig.subplots_adjust(top=0.90,bottom=0.03, wspace=0.15)\n",
    "ax.scatter(x,y,marker=\"*\", s=4.5, c=\"b\")\n",
    "ax.plot(x_pf, y_pf, lw=.75, ls='-',c ='g',label=\"numpy polyfit\")\n",
    "ax.xaxis.set_major_locator(ticker.MultipleLocator(5))\n",
    "ax.set_xticks(x[::10]-1,minor=False)\n",
    "ax.set_xticklabels(x[::10]-1,rotation=45)\n",
    "ax.grid(alpha=0.4)\n",
    "ax.legend(loc='best')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "72003526",
   "metadata": {},
   "source": [
    "## scipy curve_fit\n",
    "<font color=maroon, size=5.5><b>scipy.optimize.curve_fit</b></font> <br>\n",
    "1. use non-linear least squares to fit a function, f, to data.\n",
    "2. under the above conecption, no series of linearly independent polynomial or other forms of function families are involved in function approximation. Note that in curve_fit, we presumably preconceive one functioin form and d MSE to approximate this function. Yet in Orthogonal polynomial least squares approximation， we don't preconceive the possible formula of given data sets."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "28f56124",
   "metadata": {},
   "source": [
    "### foundamental conception\n",
    "to start with, we need a premised function of this data distribution, then mse would unravel aroudn this preassumed function <br>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "93ae04f9",
   "metadata": {},
   "source": [
    "### sample1 - polynomial form\n",
    "\n",
    "approximate functions like\n",
    "\n",
    "$$\n",
    "    f(x) = -x^3 + x^2 + sin(2x), \\space x \\in (2,3)\n",
    "$$\n",
    "white noise added to this function is:\n",
    "$$\n",
    "    \\mathbf{WN}(5,20)\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 428,
   "id": "29db4560",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 2.41853545  1.04069146 -1.06912408]\n",
      "0.0 + 2.4185354482475443·x¹ + 1.0406914566647603·x² -\n",
      "1.0691240757018385·x³\n"
     ]
    }
   ],
   "source": [
    "from scipy.optimize import curve_fit\n",
    "from numpy.polynomial import Polynomial\n",
    "import numpy as np\n",
    "\n",
    "# define hyperparameters\n",
    "a,b = -5,5\n",
    "pts = 20\n",
    "\n",
    "x = np.linspace(a,b,pts)\n",
    "y = -np.power(x,3)+np.power(x,2)+np.sin(2*x)+5+20*np.random.randn(len(x))\n",
    "\n",
    "def f(x,a,b,c):\n",
    "    return a*np.power(x,1)+b*np.power(x,2)+c*np.power(x,3)\n",
    "\n",
    "cs,stat = curve_fit(f,xdata=x,ydata=y)\n",
    "print(cs)\n",
    "print(Polynomial(np.r_[0,cs]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 429,
   "id": "09500cf9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 4.27230111e-01 -7.54879523e-02 -1.33986583e+01  7.47573367e+01\n",
      "  -1.65622473e+01]\n",
      " [-7.54879523e-02  1.33767710e-02  2.32022556e+00 -1.28561003e+01\n",
      "   2.83439427e+00]\n",
      " [-1.33986583e+01  2.32022556e+00  5.35997947e+02 -3.25023132e+03\n",
      "   7.62514089e+02]\n",
      " [ 7.47573367e+01 -1.28561003e+01 -3.25023132e+03  2.58370664e+04\n",
      "  -7.32895959e+03]\n",
      " [-1.65622473e+01  2.83439427e+00  7.62514089e+02 -7.32895959e+03\n",
      "   2.83256147e+03]]\n"
     ]
    }
   ],
   "source": [
    "print(stats)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 430,
   "id": "c70e2c43",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 300x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib as mpl\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "from matplotlib import ticker\n",
    "from numpy.polynomial.chebyshev import Chebyshev\n",
    "\n",
    "y_cs = f(x,*cs)\n",
    "fig, ax = plt.subplots(1,1,figsize=(3,3),\n",
    "                       facecolor=\"whitesmoke\",\n",
    "                       edgecolor=\"gray\")\n",
    "fig.subplots_adjust(top=0.92,bottom=0.03,hspace=0.15)\n",
    "fig.suptitle(\"curve-fit on polynomial function\")\n",
    "ax.scatter(x,y,marker='o',s=6.5,c='g')\n",
    "ax.plot(x,y,lw=.75,ls='--',c='b',label=\"original\")\n",
    "ax.plot(x,y_cs,lw=.75,ls='-',c='r',label=\"curve_fit\")\n",
    "ax.plot(x,Polynomial(coef=np.r_[0,cs],domain=(a,b),window=(a,b)).linspace(pts)[1],\n",
    "        lw=.75,ls='-.',c='black',label=\"polynomial\")\n",
    "ax.xaxis.set_major_locator(ticker.MultipleLocator((b-a)*2/pts))\n",
    "plt.xticks(fontsize=5)\n",
    "ax.grid(alpha=0.4)\n",
    "ax.legend(loc='best')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bf93983",
   "metadata": {},
   "source": [
    "### sample2 - power function\n",
    "$$\n",
    "    2*\\pi^x + 4 + \\displaystyle\\frac{2}{e^x} + \\frac{e}{x^5} +\\mathbf{WN}(5,10)\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 440,
   "id": "3b712dbd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 2.79208623e-02,  1.27808059e+01,  1.31075200e+01,  8.79321843e+01,\n",
       "       -4.16661900e+01])"
      ]
     },
     "execution_count": 440,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import warnings\n",
    "from scipy.optimize import curve_fit\n",
    "\n",
    "# define hyperparameters\n",
    "a,b = 1,3\n",
    "pts = 20\n",
    "\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "x = np.linspace(a,b,pts)\n",
    "y = 2*np.power(np.pi,x)+4+np.divide(2,np.exp(x))+np.divide(np.e,np.power(x,5)) \\\n",
    "    +5+np.random.randn(len(x))*20\n",
    "\n",
    "def ufun(x,a,b,c,d,e):\n",
    "    return a*np.power(b,x)+c+np.divide(d,np.exp(x))+np.divide(e,np.power(x,5))\n",
    "\n",
    "y_pred,stats = curve_fit(ufun,x,y)\n",
    "y_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 441,
   "id": "d33b9f88",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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586dGTx4MF26dMmz316/JadTIk8//TT79u2jV69eXLhwAV9fX5tlZmdnM2zYMLp160bfvn3t0EvYunUr8fHxdOvWjevXr+Ph4YGPjw+9evWyWmadOnW4ePEiIN5cN27coFKlSjb3NSUlhZMnT9KwYUMOHjxosp3S62TJPVIq05J7pLStJfdIqUxL75FSuUrvEcCqVau4c+cOM2fOJC4ujjJlyhhtZ6/fUqFWIkuWLKFhw4YGWvTZZ5/l448/ZsKECfz++++89dZbNstcu3Ytu3btIi4ujp07d+Lr68v69ettkvn999/r/543bx6BgYEWKRBjMocMGcK4cePo2rUrMTExzJ49G09PT8UyTcmdMmUKb775JpMmTcLPz4+lS5caPdbYdWrcuLFN90ipTEvukVKZltwjpTItvUdK5Sq9R7o+jBw5kk6dOuHm5sbHH39cIL8lHU65diYtLY3du3dTqVIlmjdv7ujuSIwg75FzYI/75JRKRCKRFB4KjXdGIpE4J1KJSCQSm5BKRCKR2IRUIhKJxCakEpFIJDYhlYhEIrEJqUQkEolNSCUikUhs4v8BCIL/xgKwZXYAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 300x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "plt.rcParams[\"font.sans-serif\"] = \"SimHei\"\n",
    "plt.rcParams[\"axes.unicode_minus\"] = False\n",
    "\n",
    "fig, ax = plt.subplots(1,1,figsize=(3,3),\n",
    "                       facecolor=\"whitesmoke\",\n",
    "                       edgecolor=\"gray\")\n",
    "fig.suptitle(\"curve-fit on power function\")\n",
    "fig.subplots_adjust(top=0.88,bottom=0.05, hspace=0.15)\n",
    "ax.scatter(x,y,marker=\"*\",s=6.5,c=\"g\",label=\"original\")\n",
    "ax.plot(x,y,lw=.75,ls='--',c='b')\n",
    "ax.plot(x,ufun(x,*y_pred),lw=.75,ls='-',c='r',label=\"curve-fit\")\n",
    "ax.xaxis.set_major_locator(ticker.MultipleLocator((b-a)*2/pts))\n",
    "ax.grid(alpha=0.4)\n",
    "ax.legend(loc=\"best\",fontsize=7.5)\n",
    "plt.xticks(fontsize=8)\n",
    "plt.yticks(fontsize=8)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ecbd77bc",
   "metadata": {},
   "source": [
    "## scipy leastsq\n",
    "1. actually scipy <font color=sapphire><b>curve_fit()</b></font> will call <font color=sapphire><b>leastsq()</b></font>, thus two function operate at the same rate. The only difference in that <font color=sapphire><b>leastsq()</b></font> is more accurate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 456,
   "id": "2e49bc6e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test the number of iteration\n",
      "Test the number of iteration\n",
      "Test the number of iteration\n",
      "Test the number of iteration\n",
      "Test the number of iteration\n",
      "Test the number of iteration\n",
      "Test the number of iteration\n",
      "Test the number of iteration\n",
      "Test the number of iteration\n",
      "Test the number of iteration\n",
      "Test the number of iteration\n",
      "[ 1.25653296  0.84361635 -0.02039887]\n",
      "[1]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy.optimize import leastsq\n",
    "\n",
    "xi=np.array([8.19,2.72,6.39,8.71,4.7,2.66,3.78])\n",
    "yi=np.array([7.01,2.78,6.47,6.71,4.1,4.23,4.05])\n",
    "\n",
    "def func(p,x):\n",
    "    a,b,c=p\n",
    "    return c*x**2+b*x+a\n",
    "\n",
    "def error(p,x,y,s):\n",
    "    print (s)\n",
    "    return func(p,x)-y\n",
    "\n",
    "p0=[0,0,0]\n",
    "\n",
    "# fitting process\n",
    "s=\"Test the number of iteration\" \n",
    "p,*stats = leastsq(error,p0,args=(xi,yi,s)) \n",
    "print(p)\n",
    "print(stats)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 463,
   "id": "930c9076",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 300x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.figure(figsize=(3,3),facecolor=\"whitesmoke\",edgecolor=\"gray\")\n",
    "plt.title(\"leastsq method on polynomial\")\n",
    "plt.scatter(xi,yi,marker=\"x\",c=\"g\",s=7.5,label=\"sample points\")\n",
    "x=np.linspace(0,10,1000)\n",
    "plt.plot(x,func(p,x),c=\"orange\",lw=.75,ls='-',label=\"Fitting Line\",) #画拟合直线\n",
    "plt.legend(loc=\"best\",fontsize=7.5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9882e939",
   "metadata": {},
   "source": [
    "# lagrange interpolation\n",
    "## raw interpolation\n",
    "$$\n",
    "    L_n(x) = \\displaystyle\\sum_{i=0}^{n}{l_i(x)f(x_i)}\n",
    "$$\n",
    "\n",
    "where\n",
    "\n",
    "$$\n",
    "\\begin{array}{ll}\n",
    "l_i(x) = \\frac{\\omega_{n+1}(x)}{(x-x_i)\\omega^{\\prime}_{n+1}(x_i)} \\space , \\\\\n",
    "\\omega_{n+1} = (x-x_0)(x-x_1)\\cdots(x-x_n) \\space ,\\\\\n",
    "\\omega^{\\prime}_{n+1}(x_i) = (x_i-x_0)(x_i-x_1)\\cdots(x_i-x_{i-1})(x_i-x_{i+1})\\cdots(x_i-x_n) \\\\\n",
    "\\end{array}\n",
    "$$\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ca9f278",
   "metadata": {},
   "source": [
    "## scipy implementation\n",
    "<font color=maroon, size=5.5><b>scipy.interpolate.lagrange</b></font>\n",
    "```\n",
    "Parameters\n",
    "----------\n",
    "x : array_like\n",
    "    `x` represents the x-coordinates of a set of datapoints.\n",
    "w : array_like\n",
    "    `w` represents the y-coordinates of a set of datapoints, i.e., f(`x`).\n",
    "\n",
    "Returns\n",
    "-------\n",
    "lagrange : `numpy.poly1d` instance\n",
    "    The Lagrange interpolating polynomial.\n",
    "```\n",
    "<font color=sapphire size=4.5><b> return of lagrange interpolation is in descending order, if fitted into Polynomial form, coefficient array should be inversed!</b></font>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b4cc09b1",
   "metadata": {},
   "source": [
    "## sample \n",
    "suppose we have data points:<br>\n",
    "$(1,4)$, $(2,5)$,$(3,9)$,$(8,2)$,$(12,-2)$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 464,
   "id": "7a6a45c2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "         4          3         2\n",
      "0.03975 x - 0.8994 x + 5.903 x - 11.01 x + 9.965\n"
     ]
    }
   ],
   "source": [
    "from scipy.interpolate import lagrange\n",
    "from numpy.polynomial import polynomial\n",
    "\n",
    "x = np.array([1,2,3,8,12])\n",
    "y = np.array([4,5,9,2,-2])\n",
    "f = lagrange(x,y)\n",
    "print(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 465,
   "id": "db71816d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9.965367965367964 - 11.008369408369415·x¹ + 5.9026695526695505·x² -\n",
      "0.8994227994227992·x³ + 0.039754689754689744·x⁴\n"
     ]
    }
   ],
   "source": [
    "print(Polynomial(f.coef[::-1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 467,
   "id": "45e7a60d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 450x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib as mpl\n",
    "from matplotlib import pyplot as plt\n",
    "from matplotlib import ticker\n",
    "import numpy\n",
    "import warnings\n",
    "\n",
    "# define hyperparameters\n",
    "pts = 20\n",
    "a, b = 1,12\n",
    "\n",
    "x_lage = np.linspace(a,b,pts,endpoint=True)\n",
    "y_lage = Polynomial(coef=f.coef[::-1],domain=(a,b),window=(a,b)).linspace(pts)[1]\n",
    "\n",
    "%matplotlib inline\n",
    "warnings.filterwarnings('ignore')\n",
    "plt.rcParams[\"font.sans-serif\"] = \"SimHei\"\n",
    "\n",
    "fig,ax = plt.subplots(1,1,figsize=(3,2),dpi=150,\n",
    "                     facecolor=\"whitesmoke\",\n",
    "                     edgecolor=\"gray\")\n",
    "fig.suptitle(\"lagrange interpolation polynomial\")\n",
    "fig.subplots_adjust(top=0.90, bottom=0.05,wspace=0.02)\n",
    "ax.scatter(x,y,marker=\"o\",c='g',s=7.5)\n",
    "ax.plot(x_lage,y_lage,lw=.75,ls='-',c='r',label=\"lagrange interpolation\")\n",
    "ax.grid(alpha=0.4)\n",
    "ax.legend(loc=\"best\",fontsize=7.5)\n",
    "ax.xaxis.set_major_locator(ticker.MultipleLocator(2))\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cb36587c",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python3.6",
   "language": "python",
   "name": "python3.6"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "288px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
